from sklearn.cluster import KMeans
import numpy as np
import matplotlib.pyplot as plt
#画图显示中文
plt.rcParams['font.sans-serif']='SimHei'
#画图显示负号
plt.rcParams['axes.unicode_minus']=False
#加载数据
x=np.loadtxt('test.txt')
#创建空列表存放距离和
list1=[]
# 循环创建模型  分类个数为1-10
for i in range(10):
    #KMeans（分类个数）
    model=KMeans(i+1)
    #拟合数据
    model.fit(x)
    #保存点到聚类中心距离和
    list1.append(model.inertia_)
#list2存放1-10,  分类个数
list2=np.arange(1,11)
#画出肘部图
plt.plot(list2,list1)
#加标签
plt.annotate('许锦涛',xy=(4,800))
# 循环加入1-10的标签
for i in range(10):
    plt.annotate(str(i+1),xy=(list2[i],list1[i]))
plt.show()
#根据肘部图  选择分4类
k=4
#创建模型
model=KMeans(k)
#拟合数据
model.fit(x)
#获得分类标签
carr=model.labels_
#获得聚类中心标签
centers=model.cluster_centers_
#画出所有样本点，，并根据分类 涂色
plt.scatter(x[:,0],x[:,1],c=carr)
#画出四个聚类中心点
plt.scatter(centers[:,0],centers[:,1],c=['r','b','g','pink'],marker='*',s=1080)
#给聚类中心加上标签
for i in range(k):
    plt.annotate('聚类'+str(i+1),xy=(centers[i,0],centers[i,1]))
plt.show()